#include "ros/ros.h"
#include "geometry_msgs/Twist.h"
#include "test_pkg/person.h"

int main(int argc, char **argv)
{
    //ros结点初始化，命名ros结点
    ros::init(argc, argv, "v_pub");
 
    //创建节点句柄，用来管理ros api的资源
    ros::NodeHandle n;
    ros::NodeHandle p;

    //创建一个Publisher对象
    //消息类型为geometry_msgs::Twist
    //发布名为/turtle1/cmd_vel的topic
    //队列长度10，相当于一个消息缓冲区，爆列的处理机制是保留最新的数据
    ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",10);
    ros::Publisher person_info_pub = p.advertise<test_pkg::person>("/person_info",10);

    //设置循环的频率，下面的while循环的频率
    ros::Rate loop_rate(10);
 
    int count = 0;
    while (ros::ok()) // Keep spinning loop until user presses Ctrl+C
    {
        //创建geometry_msgs::Twist消息对象
        geometry_msgs::Twist vel_msg;   
        vel_msg.linear.x = 0.5;         //设置消息对象x方向线速度属性
        vel_msg.angular.z = 0.2;        //设置消息对象z方向角速度属性

        //创建个人信息
        test_pkg::person person_msg;
        person_msg.name = "Tom";
        person_msg.age = 18;
        person_msg.gender = test_pkg::person::male;

        //发布消息，由创建的publisher对象发布
        turtle_vel_pub.publish(vel_msg);    //将创建的消息对象发布
        ROS_INFO("%d: [%0.2f m/s, %0.2f rad/s]",count, vel_msg.linear.x, vel_msg.angular.z);
        person_info_pub.publish(person_msg);
        ROS_INFO("%s, %d, %d", person_msg.name.c_str(), person_msg.age, person_msg.gender);

        ros::spinOnce(); // Allow ROS to process incoming messages
        //按照前面定义的循环频率延时
        loop_rate.sleep(); 
        count++;
    }
 
    return 0;
}

